package generate

import (
	"github.com/mozillazg/go-pinyin"
	"gorm.io/gen/internal/murmur3"
	"strings"
)

var pyhash_flag = false

func SetPyhashFlag(flag bool) {
	pyhash_flag = flag
}

// 将中文部分转为拼音首字母
// ChineseToPinyinInitials 将字符串中的中文字符转为对应的拼音首字母
func ChineseToPinyinInitials(s string) string {
	a := pinyin.NewArgs()
	a.Style = pinyin.FirstLetter // 设置风格为首字母
	var result []string
	flag := false
	for _, r := range s {
		py := pinyin.Pinyin(string(r), a)
		if len(py) > 0 && len(py[0]) > 0 { // 判断是否转换成功
			result = append(result, strings.ToUpper(py[0][0])) //将拼音部分都大写显示
			flag = true
		} else { // 不是中文字符，直接添加
			result = append(result, string(r))
		}
	}
	if flag && pyhash_flag {
		hasher := murmur3.New32()
		hasher.Write([]byte(s))
		hash := hasher.Sum32()
		result = append(result, "_"+uint32ToHex62(hash))
	}
	return strings.Join(result, "")
}

// 将uint32转为62进制字符串
func uint32ToHex62(value uint32) string {
	// 定义62进制的字符集
	const charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
	result := []string{}

	// 不断地除以62并取余数，直到value为0
	for value > 0 {
		remainder := value % 62
		result = append([]string{string(charset[remainder])}, result...)
		value /= 62
	}

	// 如果结果为空，表示原值为0
	if len(result) == 0 {
		return "0"
	}

	return strings.Join(result, "")
}
